package com.bolang.onlycode.demo.designPatterns.builder;

/**
 * 省略掉了director这个角色，将构建算法交给了client端，其次将builder写到了要构建的产品类里面，最后采用了链式调用
 */
public class Computer {
    private final String cpu;//必须
    private final String ram;//必须
    private final int usbCount;//可选
    private final String keyboard;//可选
    private final String display;//可选

    private Computer(Builder builder) {
        this.cpu = builder.cpu;
        this.ram = builder.ram;
        this.usbCount = builder.usbCount;
        this.keyboard = builder.keyboard;
        this.display = builder.display;
    }

    public static class Builder {
        private String cpu;//必须
        private String ram;//必须
        private int usbCount;//可选
        private String keyboard;//可选
        private String display;//可选

        public Builder(String cpu, String ram) {
            this.cpu=cpu;
            this.ram=ram;
        }
        public Builder setUsbCount(int usbCount){
            this.usbCount=usbCount;
            return this;
        }
        public Builder setKeyboard(String keyboard){
            this.keyboard=keyboard;
            return this;
        }
        public Builder setDisplay(String display){
            this.display=display;
            return this;
        }
        public Computer build(){
            return new Computer(this);
        }

    }

//    public static void main(String[] args) {
//        Computer computer=  new Computer.Builder("因特二","三星")
//                .setDisplay("三星二十四寸")
//                .setKeyboard("罗技")
//                .setUsbCount(2)
//                .build();
//    }
}
